<?php

namespace App\Libraries\Contracts;

use Illuminate\Http\Request;

interface IBaseServices
{
    /**
     * [GetAllData 获取所有数据].
     */
    public function GetAllData();

    public function GetListByPage(Request $request);

    /**
     * [GetDatasByCondition  根据条件查询数据].
     *
     * @param $condition
     * @param string $columns
     *
     * @return mixed
     */
    public function GetDatasByCondition($condition, $columns = '[*]');

    /**
     * [GetCountByCondition 根据条件查询数据量].
     *
     * @param array $condition 查询条件
     */
    public function GetCountByCondition($condition);

    /**
     * [GetById 通过编号查找对象实例].
     *
     * @param int $id 编号
     */
    public function GetById($id);

    public function Tree(array $columns = ['*']);

    /**
     * 创建新数据.
     *
     * @param array  $data
     * @param string $messages 消息模板
     *
     * @return array 消息
     */
    public function Create($data, $messages = '');

    /**
     * 修改数据.
     *
     * @param array  $data     新的数据信息
     * @param int    $id       数据编号
     * @param string $messages 消息模板
     *
     * @return array 消息
     */
    public function Update($data, $id, $messages = '');

    /**
     * [Remove 移除操作].
     *
     * @param array  $condition 移除条件
     * @param bool   $isId      是否为Id
     * @param string $messages  消息模板
     */
    public function Remove($condition, $isId = false, $messages = '');

    /**
     * [ChangeStatus 修改状态].
     *
     * @param int $id     编号
     * @param int $status 状态
     */
    public function ChangeStatus($id);

    /**
     *  对所属节点进行排序或升序操作.
     *
     * @param int    $id   编号
     * @param string $type 排序类型
     */
    public function Reorder($id, $type);

    /**
     * [UniqueVerify 唯一验证].
     *
     * @param [type] $key   [键名]
     * @param [type] $value [键值]
     *
     * @return bool
     */
    public function UniqueVerify($key, $value);

    /**
     * Increment a column's value by a given amount.
     *
     * @param string $column
     * @param int    $id
     * @param int    $amount
     *
     * @return mixed
     */
    public function increment($column, $id, $amount);

    /**
     * Decrement a column's value by a given amount.
     *
     * @param string $column
     * @param int    $id
     * @param int    $amount
     *
     * @return mixed
     */
    public function decrement($column, $id, $amount);

    public function GetEnableCategories();

    public function EditEnableOrDisable($id);

    public function EnableOrDisable($id);
}
